package integracion;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import share.Tarea;

public class TareaDAO
{
	private final Connection conn;

	public TareaDAO(Connection conn)
	{
		this.conn = conn;
	}

	public boolean insert(Tarea tarea)
	{
		Statement ps;

		try
		{
			String consulta="INSERT INTO tarea VALUES ("+"null,'"+tarea.getNombre()+"','"+tarea.getDuracion()+"','"+tarea.getBitacora()+
			"','"+tarea.getFecha_Inicio()+"','"+tarea.getFecha_Final()+"');";
			System.out.println(consulta);
			ps = conn.createStatement();
			ps.executeUpdate(consulta);
		}
		catch (SQLException e)
		{

			e.printStackTrace();
		}

		return false;
	}

	public Tarea getTareaByNick(String nick)
	{
		PreparedStatement ps;
		try
		{
			ps = conn.prepareStatement("select * from tarea where nombre=?");
			ps.setString(2, nick);

			ResultSet rs = ps.executeQuery();
			if(rs.next())
			{
				Tarea tarea = new Tarea();
				tarea.setCodigo(rs.getInt("codigo"));
				tarea.setNombre(rs.getString("nombre"));
				tarea.setDuracion(rs.getInt("duracion"));
				tarea.setBitacora(rs.getString("biracora"));
				tarea.setFecha_Inicio(rs.getString("Fecha_inicio"));
				tarea.setFecha_Final(rs.getString("Fecha_Final"));
				return tarea;
			}
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return null;

	}

	public Tarea getTareaById(int id)
	{
		PreparedStatement ps;
		try
		{
			ps = conn.prepareStatement("select * from tarea where codigo=?");
			ps.setInt(1, id);

			ResultSet rs = ps.executeQuery();
			if(rs.next())
			{

				Tarea tarea = new Tarea();
				tarea.setCodigo(rs.getInt("codigo"));
				tarea.setNombre(rs.getString("nombre"));
				tarea.setDuracion(rs.getInt("duracion"));
				tarea.setBitacora(rs.getString("bitacora"));
				tarea.setFecha_Inicio(rs.getString("Fecha_inicio"));
				tarea.setFecha_Final(rs.getString("Fecha_Final"));
				return tarea;
			}
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return null;

	}

	public boolean eliminarTareaId(int id)
	{
		PreparedStatement ps;
		try
		{
			ps = conn.prepareStatement("delete from tarea where codigo="+id+";");
			ps.executeUpdate();
			return true;

		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return false;

	}

	public void modificar(Tarea tarea)
	{
		Statement ps;

		try
		{	String consulta="UPDATE tarea set nombre= '"+tarea.getNombre()+"',duracion= '"+tarea.getDuracion()+"',bitacora= '"+tarea.getBitacora()+"' where codigo= "+tarea.getCodigo()+";";
			System.out.println(consulta);
			ps = conn.createStatement();
			ps.executeUpdate(consulta);
		}
		catch (SQLException e)
		{

			e.printStackTrace();
		}

		return;
	}

	public ArrayList<Tarea> getLista()
	{
		ResultSet rs;
		try
		{
			rs = conn.createStatement().executeQuery("select * from tarea");
			ArrayList<Tarea> lista = new ArrayList<Tarea>();
			while(rs.next())
			{

				Tarea tarea = new Tarea();
				tarea.setCodigo(rs.getInt("codigo"));
				tarea.setNombre(rs.getString("nombre"));
				tarea.setDuracion(rs.getInt("duracion"));
				tarea.setBitacora(rs.getString("bitacora"));
				tarea.setFecha_Inicio(rs.getString("Fecha_inicio"));
				tarea.setFecha_Final(rs.getString("Fecha_Final"));

				lista.add(tarea);
			}
			return lista;
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	public ArrayList<Tarea> getListaAsignar()
	{
		ResultSet rs;
		try
		{
			rs = conn.createStatement().executeQuery("select codigo,nombre,duracion,bitacora,Fecha_inicio, Fecha_Final from tarea_usuario JOIN tarea where tarea.codigo=tarea_usuario.codigo_tarea and Realizada= 0");
			ArrayList<Tarea> lista = new ArrayList<Tarea>();
			while(rs.next())
			{

				Tarea tarea = new Tarea();
				tarea.setCodigo(rs.getInt("codigo"));
				tarea.setNombre(rs.getString("nombre"));
				tarea.setDuracion(rs.getInt("duracion"));
				tarea.setBitacora(rs.getString("bitacora"));
				tarea.setFecha_Inicio(rs.getString("Fecha_inicio"));
				tarea.setFecha_Final(rs.getString("Fecha_Final"));

				lista.add(tarea);
			}
			return lista;
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	public void asignarTarea(int codigoTarea, int codigoUsuario)
	{
		Statement ps;

		try
		{	String consulta="Insert INTO tarea_usuario VALUES ("+ codigoTarea+","+codigoUsuario+",SYSDATE(),SYSDATE(),1);";
			System.out.println(consulta);
			ps = conn.createStatement();
			ps.executeUpdate(consulta);

		}
		catch (SQLException e)
		{

			e.printStackTrace();
		}

		return;
	}

	public ArrayList<Tarea> BuscarTarea(int codigoUsuario)
	{
		ResultSet rs;
		try
		{
			rs = conn.createStatement().executeQuery("select codigo,nombre,duracion,bitacora,Fecha_inicio, Fecha_Final from tarea_usuario JOIN tarea where tarea.codigo=tarea_usuario.codigo_tarea and codigo_usuario ="+codigoUsuario+";");
			ArrayList<Tarea> lista = new ArrayList<Tarea>();
			while(rs.next())
			{

				Tarea tarea = new Tarea();
				tarea.setCodigo(rs.getInt("codigo"));
				tarea.setNombre(rs.getString("nombre"));
				tarea.setDuracion(rs.getInt("duracion"));
				tarea.setBitacora(rs.getString("bitacora"));
				tarea.setFecha_Inicio(rs.getString("Fecha_inicio"));
				tarea.setFecha_Final(rs.getString("Fecha_Final"));

				lista.add(tarea);
			}
			return lista;
		}
		catch (SQLException e)
		{

			e.printStackTrace();
		}
		return null;


	}

	public Tarea obtenerTarea(int id)
	{
		ResultSet rs;
		try
		{
			rs = conn.createStatement().executeQuery("select codigo,nombre,duracion,bitacora,Fecha_inicio, Fecha_Final from tarea_usuario JOIN tarea where tarea.codigo=tarea_usuario.codigo_tarea and codigo_usuario ="+id+";");
			if(rs.next())
			{

				Tarea tarea = new Tarea();
				tarea.setCodigo(rs.getInt("codigo"));
				tarea.setNombre(rs.getString("nombre"));
				tarea.setDuracion(rs.getInt("duracion"));
				tarea.setBitacora(rs.getString("bitacora"));
				tarea.setFecha_Inicio(rs.getString("Fecha_inicio"));
				tarea.setFecha_Final(rs.getString("Fecha_Final"));
				System.out.println(tarea.getFecha_Final());
				return tarea;
			}
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return null;
	}
}